package com.kerwin.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import java.net.UnknownHostException;

@Configuration
public class RedisSerializeConfig {
    /*我刚才把配置类写到主配置类里面了*/

    /*@Bean( name = {"redisTemplate"}) 这么写好像报错*/
    /*这个name不用写，是给自己看的吗？*/
    @Bean(name = "redisTemplate")
    /*org/apache/commons/pool2/impl/GenericObjectPoolConfig*/
    /*在这里报错好像是没导 commons/pool2包*/

    /*要的是string,object 前面是字符串key 后面是T t*/
    /*用 stringRedisTemplate 也行，但是map 的value 是String 要手动把json字符串转换成对象*/

    /*因为容器里面只有 RedisTemplate<String, Object>  注入的时候别注入错误*/
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<String, Object> template = new RedisTemplate();


        //啊？我以为啥高端技术呢

        /*StringRedisTemplate 点击这个进入*/
        /*这就是个构造函数*/
        /**/
        /*public StringRedisTemplate() {
            this.setKeySerializer(RedisSerializer.string());
            this.setValueSerializer(RedisSerializer.string());
            this.setHashKeySerializer(RedisSerializer.string());
            this.setHashValueSerializer(RedisSerializer.string());
        }*/

        /*这个this是父类里面的成员变量*/
        /*当子类没有定义方法时，this对象会寻找父类中的方法*/
        /*下面用 template 就是给成员变量 赋值罢了*/

        /*public class StringRedisTemplate extends RedisTemplate<String, String> */

        /*下面的这个json是通过点 RedisSerializer进去看的*/

        template.setKeySerializer(RedisSerializer.string());
        template.setValueSerializer(RedisSerializer.json());
        template.setHashKeySerializer(RedisSerializer.string());
        template.setHashValueSerializer(RedisSerializer.json());


        /*他持有着连接工厂*/
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

}
